Skip to content

Conversation

@dredozubov
Copy link

What kind of change does this PR introduce?

Feature: Adds Ghost CMS as a new publishing provider for Postiz.

Why was this change needed?

Ghost is a popular open-source headless CMS used by many content creators and publications. Adding Ghost as a publishing provider allows Postiz users to schedule and publish blog posts directly to their Ghost sites.

Features included:

  • Ghost Admin API integration using JWT authentication (HS256)
  • Custom fields for Ghost site URL and Admin API key configuration
  • Frontend settings form with:
    • Title input
    • Slug (optional, auto-generated from title if not provided)
    • Status selector (Published/Draft)
    • Feature image upload
    • Tags with autocomplete from existing Ghost tags
  • Image upload support for feature images
  • HTML editor mode for rich content

Technical details:

  • Uses /site/ endpoint for authentication (integration API keys don't have user context for /users/me/)
  • Tags fetched via Ghost Admin API /tags/?limit=all endpoint
  • JWT tokens generated with 5-minute expiry for security

Other information:

Tested with self-hosted Ghost instance. Post creation with images works correctly.

Checklist:

Put a "X" in the boxes below to indicate you have followed the checklist;

  • I have read the CONTRIBUTING guide.
  • I checked that there were not similar issues or PRs already open for this.
  • This PR fixes just ONE issue (do not include multiple issues or types of change in the same PR).

Features:
- JWT-based authentication using Ghost Admin API keys
- Post creation with HTML content support
- Featured image upload
- Tags support
- Custom post status (published/draft/scheduled)
- Custom slug support

Files added:
- ghost.provider.ts: Main provider implementation
- ghost.dto.ts: Post settings validation
- ghost.png: Platform icon (50x50)
- Add ghost.provider.tsx with settings UI (title, slug, status, feature image, tags)
- Add ghost.tags.tsx with typed ReactTags component for free-form tag entry
- Register Ghost provider in show.all.providers.tsx
- Add GhostDto to all.providers.settings.ts type system
- Extract title from first line of message as fallback when settings not provided
- Add @tool decorated tags() method to fetch existing tags
- Update frontend to show tag suggestions while allowing new tags
- Uses Ghost Admin API /tags/ endpoint (experimental but functional)
@vercel
Copy link

vercel bot commented Dec 28, 2025

@dredozubov is attempting to deploy a commit to the Listinai Team on Vercel.

A member of the Team first needs to authorize it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant